package com.kmlitro.entity.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import com.kmlitro.entity.Abastecimento;
import com.kmlitro.entity.dao.db.DBManager;

public class AbastecimentoDAO {
	
	public void createAbastecimento(Abastecimento abastecimento) throws Exception {
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		try {
			conn = DBManager.getInstance().getConnectionMysql();
			
			String sql="INSERT INTO TB_KML_ABASTECIMENTO(KML_HODOMETRO_ABASTECIMENTO, KML_PRECOTOTAL_ABASTECIMENTO, KML_LITROS_ABASTECIMENTO, KML_ID_USUARIO_ABASTECIMENTO, KML_ID_CARRO_ABASTECIMENTO, KML_ID_COMBUSTIVEL, KML_DIF_ABASTECIMENTO, KML_PRECO_LITRO) VALUES (?,?,?,?,?,?,?,?)";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, abastecimento.getHodometro());
			pstmt.setFloat(2, abastecimento.getPrecoTotal());
			pstmt.setFloat(3, abastecimento.getLitros());
			pstmt.setInt(4, abastecimento.getUsuario());
			pstmt.setInt(5, abastecimento.getCarro());
			pstmt.setInt(6, abastecimento.getCombustivel());
			pstmt.setFloat(7, abastecimento.getDif());
			pstmt.setFloat(8, abastecimento.getPrecoLitro());
			
			pstmt.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		} finally {
			try{
				if (pstmt != null){
					pstmt.close();	
				}
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
				throw new Exception(e);
			}
		}
		
	}
	
	public List<Abastecimento> selectAbastecimentos(int userId) throws Exception{
		List<Abastecimento> abastecimentos = new ArrayList<Abastecimento>();
		
		Abastecimento abastecimento = new Abastecimento();
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try {
			conn = DBManager.getInstance().getConnectionMysql();
			
			String sql = "SELECT * FROM TB_KML_ABASTECIMENTO WHERE KML_ID_USUARIO_ABASTECIMENTO = ? ORDER BY KML_DT_ABASTECIMENTO DESC";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, userId);
			
			rs = pstmt.executeQuery();
			
			if(null != rs && rs.next()){
				abastecimento.setId(rs.getInt("KML_ID_ABASTECIMENTO"));
				abastecimento.setData(new SimpleDateFormat("dd/mm/yyyy HH:mm").format(rs.getDate("KML_DT_ABASTECIMENTO")));
				abastecimento.setHodometro(rs.getString("KML_HODOMETRO_ABASTECIMENTO"));
				abastecimento.setLitros(rs.getFloat("KML_LITROS_ABASTECIMENTO"));
				abastecimento.setPrecoTotal(rs.getFloat("KML_PRECOTOTAL_ABASTECIMENTO"));
				abastecimento.setPrecoLitro(rs.getFloat("KML_PRECO_LITRO"));
				
				abastecimentos.add(abastecimento);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try{
				if (rs != null){
					rs.close();	
				}
				if (pstmt != null){
					pstmt.close();	
				}
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) {
				throw new Exception(e);
			}		
		}
		
		
		return abastecimentos;
	}
	
	public Abastecimento selectHodometroUltimoAbastecimento(int veiculoId) throws Exception {
		
		Abastecimento abastecimento = new Abastecimento();
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try {
			conn = DBManager.getInstance().getConnectionMysql();
			
			String sql = "SELECT KML_HODOMETRO_ABASTECIMENTO FROM TB_KML_ABASTECIMENTO WHERE KML_ID_CARRO_ABASTECIMENTO = ? ORDER BY KML_DT_ABASTECIMENTO DESC";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, veiculoId);
			
			rs = pstmt.executeQuery();
			
			if(null != rs && rs.next()){
				abastecimento.setHodometro(rs.getString("KML_HODOMETRO_ABASTECIMENTO"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try{
				if (rs != null){
					rs.close();	
				}
				if (pstmt != null){
					pstmt.close();	
				}
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) {
				throw new Exception(e);
			}		
		}
		
		
		return abastecimento;
	}
	
	public List<Abastecimento> selectAbastecimentosPorVeiculo(int userId, int veiculoId) throws Exception{
		List<Abastecimento> abastecimentos = new ArrayList<Abastecimento>();
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try {
			conn = DBManager.getInstance().getConnectionMysql();
			
			String sql = "SELECT * FROM TB_KML_ABASTECIMENTO WHERE KML_ID_USUARIO_ABASTECIMENTO = ? AND KML_ID_CARRO_ABASTECIMENTO = ? ORDER BY KML_DT_ABASTECIMENTO DESC";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, userId);
			pstmt.setInt(2, veiculoId);
			
			rs = pstmt.executeQuery();
			
			while(null != rs && rs.next()){
				Abastecimento abastecimento = new Abastecimento();
				
				abastecimento.setId(rs.getInt("KML_ID_ABASTECIMENTO"));
				abastecimento.setData(new SimpleDateFormat("dd/MM/yy kk:mm").format(rs.getTimestamp("KML_DT_ABASTECIMENTO")));
				abastecimento.setHodometro(rs.getString("KML_HODOMETRO_ABASTECIMENTO"));
				abastecimento.setLitros(rs.getFloat("KML_LITROS_ABASTECIMENTO"));
				abastecimento.setPrecoTotal(rs.getFloat("KML_PRECOTOTAL_ABASTECIMENTO"));
				abastecimento.setCarro(rs.getInt("KML_ID_CARRO_ABASTECIMENTO"));
				abastecimento.setCombustivel(rs.getInt("KML_ID_ABASTECIMENTO"));
				abastecimento.setDif(rs.getInt("KML_DIF_ABASTECIMENTO"));
				
				abastecimentos.add(abastecimento);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try{
				if (rs != null){
					rs.close();	
				}
				if (pstmt != null){
					pstmt.close();	
				}
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) {
				throw new Exception(e);
			}		
		}
		
		
		return abastecimentos;
	}
	
	public void deleteAbastecimento(int idAbastecimento, int userId) throws Exception{
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		try {
			conn = DBManager.getInstance().getConnectionMysql();
			
			String sql="DELETE FROM TB_KML_ABASTECIMENTO WHERE KML_ID_ABASTECIMENTO = ? AND KML_ID_USUARIO_ABASTECIMENTO = ?";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, idAbastecimento);
			pstmt.setInt(2, userId);
			
			pstmt.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		} finally {
			try{
				if (pstmt != null){
					pstmt.close();	
				}
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
				throw new Exception(e);
			}
		}
		
	}

}
